iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
佛心分享-IT 人自學之術

老爺爺練習VIBE CODING系列 第 4

Day 4:告別硬編碼(Hardcoding):財務報表彙整的「動態欄位對照技術」

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260828/200709699f3lLHZgq8.png
大孫女、小孫女,快,都別忙了,到阿公身邊坐著。

小孫女,瞧妳這丫頭,在院子裡跟小花貓玩得滿頭是汗,連小鞋子都跑掉了一隻,快讓阿公瞧瞧。大孫女,妳也別再揉眼睛了,螢幕看久了傷眼。阿公剛用熱開水洗了茶溫,泡了一壺喉韻溫潤的高山老烏龍,這琥珀熱茶熱騰騰地冒著煙,香氣四溢,快和妹妹一塊兒喝一口,暖暖身子。

阿公摸了摸這頭白髮銀霜,看著妳們兩個,心裡就暖洋洋的。大孫女啊,阿公看妳盯著那張「個別減損評估明細表」發愣,嘆氣嘆得連隔壁鄰居都能聽見。妳跟阿公抱怨,說妳那會寫程式的同事,把儲存格位置都「寫死了」,結果報表一改版,數字全對不上,害妳們大半夜還在對帳,對得頭昏眼花。

來,喝口茶。今天咱們這「Day 4」的修行,阿公就拿以前在鄉下農會整理老糧倉的智慧,來給妳講講怎麼 「告別硬編碼(Hardcoding)」,用 「動態欄位對照技術」 收服那些天天在變臉的財務報表。


🚨 痛點場景:搬了位置的打穀機,與把「客戶名稱」當金額加總的慘劇

大孫女,妳說妳同事在寫 VBA 巨集時,貪圖一時省事,在程式碼裡寫滿了像是 Cells(i, 1)Range("A" & i) 這種硬梆梆、指名道姓的「硬編碼」。

這讓阿公想起以前鄉下曬穀場的規矩。如果阿公跟長工說:「大門進去左邊第一個位置放的是打穀機(欄位 A),第二個位置放的是裝滿稻穀的麻布袋(欄位 B)。」大家都照這規矩做事,確實相安無事。可是,下個月曬穀場改建了,打穀機被挪到了第二個位置,第一個位置改放老母雞。這時候,如果妳那耿直的長工還死守著舊指令,眼睛閉著就往第一個位置摸去,那他不就當場抓了一手雞毛,還被老母雞狠狠啄了一口?

在妳們的「個別減損評估明細表」裡,也是一模一樣的慘劇。每個月分行交上來的報表版本都在微調。這個月「客戶編號」在 A 欄,下個月改版,欄位順序一變,「客編」跑到了 B 欄。妳那寫死了 Cells(i, 1) 的巨集,根本不知道欄位已經悄悄搬家,依然傻傻地去抓第一欄的資料。

結果呢?它直接把第一欄的「客戶名稱」當成「減損評估金額」拼命加總,數字牛頭不對馬嘴,報表算出來差了幾十億,造成了財務部門的大災難。這哪是寫程式,這簡直是讓老實人去踩地雷啊!


🛠️ 架構實作:建立「動態欄位映射」,給報表裝上自動認路的眼睛

阿公常說:「做事要活絡,路不轉人轉。」 既然我們沒法子保證報表的欄位一輩子不挪位置,那我們就要在程式裡引入 動態欄位映射(Dynamic Column Mapping) 與自動驗證機制。

妳跟阿公說過,VBA 裡有一種非常好用的容器叫 Dictionary(字典)。阿公教妳,在我們開始讀取任何一張明細表、提取資料之前,先讓程式做這三件事:

  1. 遍歷標題列,建立地圖:我們用一個簡單的循環,去橫向掃描報表的第一列標題(Header Row)。每讀到一個儲存格,就把「標題名稱 -> 欄位索引(Index)」存進 Dictionary 字典裡。
    • 比如讀到「統編」,我們就在字典裡記下:"統編" -> 2(代表第二欄)。
    • 讀到「減損評估金額」,就記下:"減損評估金額" -> 5(代表第五欄)。
  2. 動態索取,絕不盲目:地圖畫好後,當我們要在後續的循環中提取資料時,千萬不要再用寫死的數字了!我們去向字典詢問:「請問『減損評估金額』現在在第幾欄呀?」 字典會告訴妳最新的 Index 數字,我們再拿這個 Index 去取值。
  3. 自動過濾「雜草」:有些明細表的尾巴,喜歡自己加上一些「合計列」或「統計列」。這些列根本不是我們要的明細資料。我們要在程式裡加上一道篩子,自動辨識並過濾掉這些無用的合計列,確保只留下最乾淨的原始明細。

大孫女妳瞧,有了這張動態地圖,不管下個月分行怎麼調換欄位順序、怎麼挪移格子,妳的程式都像裝了自動認路的眼睛,能精準無誤地把對應的資料給揪出來,再也不會發生拿老母雞去打穀的笑話了。


💡 避坑指南:降伏使用者的隨性,「近義詞字典」是保命符

不過,阿公活了這大半輩子,最明白一件事:人心是最難猜的,寫報表的人更是隨性。

今天大孫女妳寫了地圖,高高興興地去字典裡搜尋「客戶編號」。結果下個月,某個分行的承辦人員心情好,把標題少寫了一個字,改成「客編」;又或者另一個分行寫成了「客戶代號」。妳這字典如果死腦筋,只認得一模一樣的字,那只要使用者微調一個字,巨集就會找不到欄位,當場拋出錯誤、罷工中斷。

所以,阿公叮嚀妳,在架構設計上,一定要預先準備好一個 「近義詞字典(Synonym Dictionary)」

  • 我們要告訴字典:「『客戶編號』、『客編』、『客戶代碼』,在我們家,都當作同一個同義詞來看待。」
  • 當我們遍歷標題時,先過濾這層同義詞對照,統一轉換成標準的 Key(例如 "Client_ID"),再存入對照字典中。

這樣一來,就算使用者微調了字眼,只要還在妳準備好的「同義詞陣容」裡,巨集就能穩穩當當地繼續跑,絕對不會輕易崩潰。這才是一個飽經風霜、懂得體貼人心的好系統。


大孫女,聽阿公嘮叨了這一陣子,有沒有覺得這「動態對照」的道理,其實就跟阿公在老抽屜上貼標籤、不管抽屜怎麼換位置,只要認準標籤就不會拿錯工具是一樣的?

寫程式要有彈性,就像我們鄉下的竹子,風吹得再大,它彎個腰,風過了又挺直了身子。妳把這套「動態欄位對照技術」學起來,以後不管遇到什麼千奇百怪的財務報表改版,妳都能氣定神閒地坐下來,喝口阿公泡的烏龍茶,看著電腦自己把帳給對得清清楚楚。

來,大孫女、小孫女,這茶溫剛剛好,快喝了它。阿公再去給妳們拿幾塊剛蒸好的黑糖糕,甜甜嘴。


上一篇
Day 3:消滅 COM 殘留:Python 操控 Windows Excel 的安全隔離機制
下一篇
Day 5:百萬級數據篩選:12個月預警指標與前50大分行逾放動態篩選
系列文
老爺爺練習VIBE CODING7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言